package com.apigen.platform.service;

import com.apigen.platform.dto.DatabaseConnectionRequest;
import com.apigen.platform.dto.TableImportRequest;
import com.apigen.platform.vo.DatabaseTableVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;
import java.util.Map;

/**
 * 数据库服务接口
 *
 * @author API Generator Platform
 * @since 2025-09-24
 */
public interface IDatabaseService {

    /**
     * 测试数据库连接
     *
     * @param connectionRequest 连接参数
     * @return 连接结果
     */
    Map<String, Object> testConnection(DatabaseConnectionRequest connectionRequest);

    /**
     * 获取数据库表列表
     *
     * @param connectionRequest 连接参数
     * @return 表列表
     */
    List<DatabaseTableVO> getDatabaseTables(DatabaseConnectionRequest connectionRequest);

    /**
     * 获取表详细信息
     *
     * @param connectionRequest 连接参数
     * @param tableName 表名
     * @return 表详细信息
     */
    DatabaseTableVO getTableDetail(DatabaseConnectionRequest connectionRequest, String tableName);

    /**
     * 导入数据表到系统
     *
     * @param connectionRequest 连接参数
     * @param importRequest 导入参数
     * @return 导入结果
     */
    Map<String, Object> importTables(DatabaseConnectionRequest connectionRequest, TableImportRequest importRequest);

    /**
     * 获取已导入的表列表
     *
     * @param projectId 项目ID
     * @param current 当前页
     * @param size 每页大小
     * @param tableName 表名筛选
     * @return 分页表列表
     */
    Page<DatabaseTableVO> getImportedTables(Long projectId, Long current, Long size, String tableName);

    /**
     * 删除已导入的表
     *
     * @param tableIds 表ID列表
     * @return 删除结果
     */
    Boolean deleteTables(List<Long> tableIds);

    /**
     * 更新表信息
     *
     * @param tableId 表ID
     * @param tableComment 表描述
     * @return 更新结果
     */
    Boolean updateTableInfo(Long tableId, String tableComment);

    /**
     * 同步表结构
     *
     * @param tableId 表ID
     * @param connectionRequest 连接参数
     * @return 同步结果
     */
    Map<String, Object> syncTableStructure(Long tableId, DatabaseConnectionRequest connectionRequest);

    /**
     * 获取表关联关系
     *
     * @param projectId 项目ID
     * @return 关联关系列表
     */
    List<Map<String, Object>> getTableRelations(Long projectId);

    /**
     * 生成表DDL语句
     *
     * @param tableId 表ID
     * @return DDL语句
     */
    String generateTableDDL(Long tableId);
}











